package hu.bme.iit.szlab4.continuity;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.List;

public class Palya {
	private Jatekos jatekos;
	private List<Tile> tilelista;

	// Makkos
	// inicializalo fuggveny, letrehozza a jatek mukodesehez szukseges
	// objektumokat, majd a letrehozott Palyaelemeket hozzaadja egy Tile-hoz
	// MEGBESZeLNI: KELL-E A VISSZAFELE NYiL A CREATE-EKNeL (//!-vel kezdodo
	// sorok)
	public void init() {
		System.out.println("****************************************");
		System.out.println("Inicializalas. Objektumok letrehozasa.\n");
		System.out.println("Letrehozott objektum: palya:Palya\n");
		System.out.println("Inicializalas vege");
		System.out.println("****************************************");

		System.out.println("-->");
		System.out.println("1. palya.init()\n");
		// Tile letrehozasa
		System.out.println("\t-->");
		Tile tile = new Tile();
		System.out.println("\t1.1 Letrehozott objektum: tile:Tile\n");
		// !System.out.println("\t<- -");

		// Ajto Palyaelem letrehozasa
		System.out.println("\t-->");
		Ajto ajto = new Ajto();
		// !System.out.println("\t<- -");
		System.out.println("\t1.2 Letrehozott objektum: ajto:Ajto");
		System.out.println("\t-->");
		// ajto hozzaadasa a tile-hoz
		tile.init(ajto);
		System.out.println("\t1.3 Hivott metodus: tile.init(ajto)");
		System.out.println("\t<- -\n");

		// Fal Palyaelem letrehozasa
		System.out.println("\t-->");
		Fal fal = new Fal();
		// !System.out.println("\t<- -");
		System.out.println("\t1.4 Letrehozott objektum: fal:Fal");
		System.out.println("\t-->");
		// ajto hozzaadasa a tile-hoz
		tile.init(fal);
		System.out.println("\t1.5 Hivott metodus: tile.init(fal)");
		System.out.println("\t<- -\n");

		// Kulcs Palyaelem letrehozasa
		System.out.println("\t-->");
		Kulcs kulcs = new Kulcs();
		// !System.out.println("\t<- -");
		System.out.println("\t1.6 Letrehozott objektum: kulcs:Kulcs");
		System.out.println("\t-->");
		// ajto hozzaadasa a tile-hoz
		tile.init(kulcs);
		System.out.println("\t1.7 Hivott metodus: tile.init(kulcs)");
		System.out.println("\t<- -\n");

		// Jatekos letrehozasa
		System.out.println("\t-->");
		Jatekos jatekos = new Jatekos();
		// !System.out.println("\t<- -");
		System.out.println("\t1.8 Letrehozott objektum: jatekos:Jatekos\n");

		System.out.println("<- -");
	}

	public boolean compareTile(Tile t1, Tile t2) {
		// @Tuzko

		System.out.println(Main.getTabok()
				+ "Visszateresi ertek: Azonos-e a ket Tile?\n"
				+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
				+ "1 - igen\n" + Main.getTabok()
				+ "Adja meg a visszateresi erteket!");

		// A felhasznaloi input ellenorzese.
		boolean ok = false;
		int valasz = 0;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok()
						+ "Adja meg a visszateresi erteket!");
			}
		}
		if (valasz == 0) {
			System.out.println(Main.getTabok() + "Visszateresi ertek: 0 - nem");
			return false;
		} else {
			System.out
					.println(Main.getTabok() + "Visszateresi ertek: 1 - igen");
			return true;
		}
	}

	// Tuzko
	public void attekintoMozgat() {
		System.out.println("****************************************");
		System.out.println("Inicializalas.Objektumok letrehozasa.");
		System.out.println("Letrehozott objektum: p:Palya");
		System.out.println("Letrehozott objektum: t1:Tile");
		System.out.println("Letrehozott objektum: t2:Tile");
		System.out.println("****************************************");

		// ezeket csak a teszt miatt hozzuk letre itt, a vegso programban
		// ezek az objektumok mar ekkor letre lesznek hozva.
		Tile t1 = new Tile();
		Tile t2 = new Tile();
		Jatekos j = new Jatekos();

		// egy valtozo amibe majd a beolvasott valaszokat taroljuk, ha a valasz
		int valasz = 0;

		// egy valtozo amivel megoldjuk az opt/alt-nal felmerulo szamozasi
		// problemat.
		int hivSz = 1;

		// kinullazzuk, hogy biztos megfeleloen hasznaljuk
		Main.tabszam = 0;

		System.out.println(Main.getTabok() + "-->");
		System.out.println("1. Hivott metodus: p.utkozesVizsgalat()\n");

		// ---------------------------------------------------------------
		// t1.getUres():boolean elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1."
				+ hivSz++ + " Hivott metodus: t1.getUres(): boolean\n");
		t1.getUres();
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		System.out.println(Main.getTabok() + "ures a t1 Tile?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		boolean ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok());
			}
		}

		// Dontunk arrol, hogy a program az alt melyik agaba keruljon bele
		// Az alapjan, hogy ures-e a t1 Tile
		if (valasz == 0) {
			System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
		} else {
			System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
		}

		// ha a t1 Tile nem ures
		if (valasz == 0) {

			// ---------------------------------------------------------------
			// t2.getUres():boolean elokeszitese, de itt nem hivjuk meg, mert
			// ez a teszteset es 1 Tile-nak biztos uresnek kell lennie, ahhoz
			// hogy tudjuk a tile-okat mozgatni
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t2.getUres(): boolean\n");
			System.out
					.println(Main.getTabok()
							+ "Visszateresi ertek: ures-e a t2 Tile? Itt csak az igen az elfogadhato valasz!");
			System.out.println(Main.getTabok() + "0 - nem");
			System.out.println(Main.getTabok() + "1 - igen");

			// A felhasznaloi input ellenorzese.
			// CSAK A TRUE-T FOGADJA EL !!
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out
							.println(Main.getTabok()
									+ "A bevitt parameter nem felel "
									+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
									+ Main.getTabok()
									+ "ures-e a t2 Tile? Itt csak az igen az elfogadhato valasz!\n"
									+ Main.getTabok() + "0 - nem\n"
									+ Main.getTabok() + "1 - igen\n"
									+ Main.getTabok());
				}
			}

			System.out
					.println(Main.getTabok() + "Visszateresi ertek: 1 - igen");
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// t1.getKoord():Pozicio meghivasa
			// Visszaadja a Tile aktualis koordinatait
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t1.getKoord(): Pozicio\n");
			Pozicio tilePoz = t1.getKoord();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// t2.getKoord():Pozicio meghivasa
			// Visszaadja a Tile aktualis koordinatait
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t2.getKoord(): Pozicio\n");
			Pozicio uresTilePoz = t2.getKoord();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// p.tileMehet(t1,t2):boolean meghivasa
			// Megvizsgalja, hogy a tile helyet cserelhet-e az ures Tilelal
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: p.tileMehet(t1,t2):boolean\n"
					+ Main.getTabok() + "Vart parameterek: \n"
					+ Main.getTabok() + "t1: Referencia a t1 Tile-ra\n"
					+ Main.getTabok() + "t2: Referencia a t2 Tile-ra\n");
			this.tileMehet(t1, t2);
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			System.out.println(Main.getTabok()
					+ "Helyet cserelhet-e az t1 Tile a ures Tilelal?");
			System.out.println(Main.getTabok() + "0 - nem");
			System.out.println(Main.getTabok() + "1 - igen");

			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok());
				}
			}

			// Dontunk arrol, hogy a program bekeruljon-e a mehet a t1 tile
			// opcionalis agba.
			if (valasz == 0) {
				System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
			} else {
				System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
			}

			// mehet a t1 tile
			if (valasz == 1) {

				// --------------------------------------------
				// t1.setKoord(uresTilePoz) meghivasa
				// Beallitja a t1 Tile koordinatait az ures Tile koordinataira
				Main.tabszam++;
				System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
						+ "1." + hivSz++
						+ " Hivott metodus: t1.setKoord(uresTilePoz)");

				// Input beolvasasanak elokeszitese
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(System.in));
				;
				String sor = "inic";

				System.out
						.println(Main.getTabok()
								+ "Vart parameterek:\n"
								+ Main.getTabok()
								+ "uresTilePoz: Pozicio tipus, egy X es egy Y koordinatabol all, amelyek nemnegativ egesz szamok.\n"
								+ Main.getTabok()
								+ "Adja meg az uresTilePoz parameter X komponenset!");

				// Vart parameter bekerese a felhasznalotol.
				// -1-el inicializalunk a ciklusfeltetel miatt
				int x = -1;
				while (!(x >= 0)) {
					try {
						sor = reader.readLine();
						x = Integer.parseInt(sor);
						if (!(x >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb gesz szam.");
					}
				}

				System.out.println(Main.getTabok()
						+ "Adja meg az uresTilePoz parameter Y komponenset!");
				// Vart parameter bekerese a felhasznalotol.
				int y = -1; // -1-el inicializalunk a ciklusfeltetel miatt
				while (!(y >= 0)) {
					try {
						sor = reader.readLine();
						y = Integer.parseInt(sor);
						if (!(y >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb egesz szam");
					}
				}
				uresTilePoz = new Pozicio(x, y);
				t1.setKoord(uresTilePoz);
				System.out.println(Main.getTabok() + "<- -\n");
				Main.tabszam--;

				// ----------------------------------------------------
				// t2.setKoord(tilePoz) meghivasa
				// Beallitja az ures Tile koordinatait a t1 Tile koordinataira
				Main.tabszam++;
				System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
						+ "1." + hivSz++
						+ " Hivott metodus: t2.setKoord(tilePoz)");

				// Input beolvasasanak elokeszitese
				reader = new BufferedReader(new InputStreamReader(System.in));
				;
				sor = "inic";

				System.out
						.println(Main.getTabok()
								+ "Vart parameterek:\n"
								+ Main.getTabok()
								+ "tilePoz: Pozicio tipus, egy X es egy Y koordinatabol all, amelyek nemnegativ egesz szamok.\n"
								+ Main.getTabok()
								+ "Adja meg a tilePoz parameter X komponenset!");

				// Vart parameter bekerese a felhasznalotol.
				// -1-el inicializalunk a ciklusfeltetel miatt
				x = -1;
				while (!(x >= 0)) {
					try {
						sor = reader.readLine();
						x = Integer.parseInt(sor);
						if (!(x >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb gesz szam.");
					}
				}
				System.out.println(Main.getTabok()
						+ "Adja meg az tilePoz parameter Y komponenset!");
				// Vart parameter bekerese a felhasznalotol.
				y = -1; // -1-el inicializalunk a ciklusfeltetel miatt
				while (!(y >= 0)) {
					try {
						sor = reader.readLine();
						y = Integer.parseInt(sor);
						if (!(y >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb egesz szam");
					}
				}
				uresTilePoz = new Pozicio(x, y);
				t1.setKoord(uresTilePoz);
				System.out.println(Main.getTabok() + "<- -\n");
				Main.tabszam--;

			}

			// ha a t1 Tile ures
		} else {

			// ---------------------------------------------------------------
			// t2.getUres():boolean elokeszitese, de itt nem hivjuk meg, mert
			// ez a teszteset es 1 Tile-nak biztos uresnek kell lennie, ahhoz
			// hogy tudjuk a tile-okat mozgatni
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t2.getUres(): boolean\n");
			System.out
					.println(Main.getTabok()
							+ "Visszateresi ertek: ures-e a t1 Tile? Itt csak a nem az elfogadhato valasz!");
			System.out.println(Main.getTabok() + "0 - nem");
			System.out.println(Main.getTabok() + "1 - igen");

			// A felhasznaloi input ellenorzese.
			// CSAK A FALSE-T FOGADJA EL !!
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out
							.println(Main.getTabok()
									+ "A bevitt parameter nem felel "
									+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
									+ Main.getTabok()
									+ "ures-e a t1 Tile? Itt csak a nem az elfogadhato valasz!\n"
									+ Main.getTabok() + "0 - nem\n"
									+ Main.getTabok() + "1 - igen\n"
									+ Main.getTabok());
				}
			}

			System.out.println(Main.getTabok() + "Visszateresi ertek: 0 - nem");
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// t1.getKoord():Pozicio meghivasa
			// Visszaadja a Tile aktualis koordinatait
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t1.getKoord(): Pozicio\n");
			Pozicio uresTilePoz = t1.getKoord();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// t2.getKoord():Pozicio meghivasa
			// Visszaadja a Tile aktualis koordinatait
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: t2.getKoord(): Pozicio\n");
			Pozicio tilePoz = t2.getKoord();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// -----------------------------------------
			// p.tileMehet(t2,t1):boolean meghivasa
			// Megvizsgalja, hogy a tile helyet cserelhet-e az ures Tilelal
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: p.tileMehet(t2,t1):boolean\n"
					+ Main.getTabok() + "Vart parameterek: \n"
					+ Main.getTabok() + "t2: Referencia a t2 Tile-ra\n"
					+ Main.getTabok() + "t1: Referencia a t1 Tile-ra\n");
			this.tileMehet(t2, t1);
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			System.out.println(Main.getTabok()
					+ "Helyet cserelhet-e az t2 Tile a ures Tilelal?");
			System.out.println(Main.getTabok() + "0 - nem");
			System.out.println(Main.getTabok() + "1 - igen");

			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok());
				}
			}

			// Dontunk arrol, hogy a program bekeruljon-e a mehet a t1 tile
			// opcionalis agba.
			if (valasz == 0) {
				System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
			} else {
				System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
			}

			// mehet a t2 tile
			if (valasz == 1) {

				// --------------------------------------------
				// t1.setKoord(tilePoz) meghivasa
				// Beallitja a t2 Tile koordinatait az ures Tile koordinataira
				Main.tabszam++;
				System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
						+ "1." + hivSz++
						+ " Hivott metodus: t1.setKoord(tilePoz)");

				// Input beolvasasanak elokeszitese
				BufferedReader reader = new BufferedReader(
						new InputStreamReader(System.in));
				;
				String sor = "inic";

				System.out
						.println(Main.getTabok()
								+ "Vart parameterek:\n"
								+ Main.getTabok()
								+ "tilePoz: Pozicio tipus, egy X es egy Y koordinatabol all, amelyek nemnegativ egesz szamok.\n"
								+ Main.getTabok()
								+ "Adja meg az tilePoz parameter X komponenset!");

				// Vart parameter bekerese a felhasznalotol.
				// -1-el inicializalunk a ciklusfeltetel miatt
				int x = -1;
				while (!(x >= 0)) {
					try {
						sor = reader.readLine();
						x = Integer.parseInt(sor);
						if (!(x >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb gesz szam.");
					}
				}

				System.out.println(Main.getTabok()
						+ "Adja meg az tilePoz parameter Y komponenset!");
				// Vart parameter bekerese a felhasznalotol.
				int y = -1; // -1-el inicializalunk a ciklusfeltetel miatt
				while (!(y >= 0)) {
					try {
						sor = reader.readLine();
						y = Integer.parseInt(sor);
						if (!(y >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb egesz szam");
					}
				}
				tilePoz = new Pozicio(x, y);
				t1.setKoord(tilePoz);
				System.out.println(Main.getTabok() + "<- -\n");
				Main.tabszam--;

				// ----------------------------------------------------
				// t2.setKoord(uresTilePoz) meghivasa
				// Beallitja az ures Tile koordinatait a t2 Tile koordinataira
				Main.tabszam++;
				System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
						+ "1." + hivSz++
						+ " Hivott metodus: t2.setKoord(uresTilePoz)");

				// Input beolvasasanak elokeszitese
				reader = new BufferedReader(new InputStreamReader(System.in));
				;
				sor = "inic";

				System.out
						.println(Main.getTabok()
								+ "Vart parameterek:\n"
								+ Main.getTabok()
								+ "uresTilePoz: Pozicio tipus, egy X es egy Y koordinatabol all, amelyek nemnegativ egesz szamok.\n"
								+ Main.getTabok()
								+ "Adja meg az uresTilePoz parameter X komponenset!");

				// Vart parameter bekerese a felhasznalotol.
				// -1-el inicializalunk a ciklusfeltetel miatt
				x = -1;
				while (!(x >= 0)) {
					try {
						sor = reader.readLine();
						x = Integer.parseInt(sor);
						if (!(x >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb gesz szam.");
					}
				}
				System.out.println(Main.getTabok()
						+ "Adja meg az uresTilePoz parameter Y komponenset!");
				// Vart parameter bekerese a felhasznalotol.
				y = -1; // -1-el inicializalunk a ciklusfeltetel miatt
				while (!(y >= 0)) {
					try {
						sor = reader.readLine();
						y = Integer.parseInt(sor);
						if (!(y >= 0)) {
							throw new Exception();
						}
					} catch (Exception e) {
						// Hibas inputot hibauzenettel es ujboli bekeressel
						// kezeljuk.
						System.out
								.println(Main.getTabok()
										+ "A bevitt ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
						System.out.println(Main.getTabok()
								+ "Nullanal nagyobb egesz szam");
					}
				}
				uresTilePoz = new Pozicio(x, y);
				t2.setKoord(uresTilePoz);
				System.out.println(Main.getTabok() + "<- -\n");
				Main.tabszam--;

			}

		}
		System.out.println(Main.getTabok() + "<- -");
		System.out.println("****************************************\n");
		// Hogy biztos jol adjuk vissza.
		Main.tabszam = 0;
	}

	// Tuzko
	public boolean tileMehet(Tile t1, Tile t2) {

		// a felhazsnaloi input mentese miatt
		int valasz;

		System.out.println(Main.getTabok() + "Helyet cserelhet a ket Tile?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		boolean ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok());
			}
		}
		return true;
	}

	// Major
	public void mozgatLep() {
		// Inicializalas, szukseges objektumok letrehozasa.
		System.out.println("****************************************");
		System.out.println("Inicializalas. Objektumok letrehozasa.");
		System.out.println("Letrehozott objektum: p:Palya");
		System.out.println("Letrehozott objektum: j:Jatekos");
		Jatekos j = new Jatekos();
		System.out.println("Inicializalas vege.");
		System.out.println("****************************************");

		// Tesztelt metodus hivasa
		System.out.println("--->");
		System.out.println("1. Hivott metodus: p.mozgat()");
		System.out.println("");

		// Hivott fuggveny hivasa
		System.out.println("\t--->");
		System.out.println("\t1.1 Hivott metodus: j.reszletesMozgat()");
		// fuggveny valodi hivasa
		j.reszletesMozgat();
		System.out.println("\t<- -");
		System.out.println("");

		System.out.println("<- -");
		System.out.println("****************************************");

	}

	public void utkozesVizsgalat() {

	}

	// Tukor
	public void utkozesVizsgalatPalyaelem() {
		// A csak ezen a szinten letrehozhato objektumok letrehozasa.
		// Az itt letrehozott objektumok csak a teszt miatti szukseg miatt
		// jonnek itt letre.

		Tile t = new Tile();
		Ajto a = new Ajto();
		Fal f = new Fal();
		Kulcs k = new Kulcs();
		Jatekos j = new Jatekos();

		// Input beolvasasanak elokeszitese
		BufferedReader reader = new BufferedReader(new InputStreamReader(
				System.in));
		;
		String sor = "inic";

		// Inicializalas blokk kiirasa.
		System.out.println("****************************************");
		System.out.println("Inicializalas. Objektumok letrehozasa.");
		System.out.println("");
		System.out.println("Letrehozott objektum: objektum: p:Palya");
		System.out.println("Letrehozott objektum: objektum: t:Tile");
		System.out.println("Letrehozott objektum: objektum: a:Ajto");
		System.out.println("Letrehozott objektum: objektum: f:Fal");
		System.out.println("Letrehozott objektum: objektum: k:Kulcs");
		System.out.println("Letrehozott objektum: objektum: j:Jatekos");
		System.out.println("");
		System.out.println("Inicializalas vege");
		System.out.println("****************************************");
		System.out.println("\n-->");
		System.out.println("1. p.utkozesVizsgalatPalyaelem():void\n");

		// ----------------------------------------
		// Meghivjuk a j:Jatekos getAktTile metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: j.getAktTile():Tile");

		// A konkret metodushivas
		j.getAktTile();
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;


		// ----------------------------------------
		// Meghivjuk a t:Tile getPalyaelem(0) metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok()+ "1." + Main.hivasszam+ " Hivott metodus: t.getPalyaelem(i):Palyaelem");
		System.out.println(Main.getTabok()+ "Vart parameterek:");
		System.out.println(Main.getTabok()+ "i: ciklusvaltozo, ennyiedik Palyaelemet kerjuk el");
		System.out.println(Main.getTabok()+ "Egesz szam. Ebben a tesztesetben, itt csak a 0 fogadhato el.");
		System.out.println(Main.getTabok()+ "Adja meg a parameter erteket!");
		// Fuggvenyparameter bekerese a felhasznalotol.
		int i = 10; // i azert 10-el van inicializalva, mert a 0-as es 1-es
					// ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
		while (i != 0) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if (i != 0) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt parameter nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out
						.println(Main.getTabok()
								+ "Egesz szam. Ebben a tesztesetben, itt csak a 0 fogadhato el.");
			}
		}
		// A konkret metodushivas
		t.getPalyaelem(0);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// ----------------------------------------
		// Meghivjuk az f:Fal metszette metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: f.metszette(j):boolean");
		System.out.println(Main.getTabok() + "Vart parameterek:");
		System.out.println(Main.getTabok() + "j: Jatekos referencia");

		// A konkret metodushivas
		f.metszette(j);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// Elagazas kezelese, metszette-e a Jatekos az Falat
		System.out.println(Main.getTabok() + "Metszette a Jatekos az Falat?");
		System.out
				.println(Main.getTabok()
						+ "Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
		System.out.println(Main.getTabok() + "Adja meg a valaszt!");
		// Valasz bekerese a felhasznalotol.
		i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es ertek
				// ertelmezve van a kesobbi logikai valtozo vizsgalatokban
		while ((i != 0) && (i != 1)) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if ((i != 0) && (i != 1)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt valasz nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen");
			}
		}
		System.out.println(Main.getTabok() + "Dontes: " + i);

		if (i == 1) {
			// ----------------------------------------
			// Ha a Jatekos metszette, akkor meghivjuk az f:Fal interakt
			// metodusat.
			Main.hivasszam++;
			Main.tabszam++;

			System.out.println(Main.getTabok() + "-->");
			// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk
			// ki, mert az opt-ok miatt az nem allando.
			System.out.println(Main.getTabok() + "1." + Main.hivasszam
					+ " Hivott metodus: f.interakt(j):boolean");
			System.out.println(Main.getTabok() + "Vart parameterek:");
			System.out.println(Main.getTabok() + "j: Jatekos referencia");

			System.out.println(Main.getTabok() + "");
			System.out
					.println(Main.getTabok()
							+ "A fuggveny mukodeset a 3. tesztesetben tudjuk kiprobalni.");
			System.out.println(Main.getTabok() + "");
			System.out.println(Main.getTabok()
					+ "Visszateresi ertek: Kizarolag false erteket vehet fel.");
			System.out
					.println(Main.getTabok()
							+ "Logikai valtozo. Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
			System.out.println(Main.getTabok()
					+ "Adja meg a visszateresi erteket!");
			// Visszateresi ertek bekerese a felhasznalotol.
			i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es
					// ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
			while (i != 0) {
				try {
					sor = reader.readLine();
					i = Integer.parseInt(sor);
					if (i != 0) {
						throw new Exception();
					}
				} catch (Exception e) {
					// Hibas inputot hibauzenettel es ujboli bekeressel
					// kezeljuk.
					System.out
							.println(Main.getTabok()
									+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
					System.out
							.println(Main.getTabok()
									+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen. Kizarolag false erteket vehet fel.");
				}
			}
			System.out.println(Main.getTabok() + "Visszateresi ertek: " + i);
			System.out.println(Main.getTabok() + "<- -");
			Main.tabszam--;
		}

		// ----------------------------------------
		// Meghivjuk a t:Tile getPalyaelem(1) metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: t.getPalyaelem(i):Palyaelem");
		System.out.println(Main.getTabok() + "Vart parameterek:");
		System.out.println(Main.getTabok()
				+ "i: ciklusvaltozo, ennyiedik Palyaelemet kerjuk el");
		System.out
				.println(Main.getTabok()
						+ "Egesz szam. Ebben a tesztesetben, itt csak a 1 fogadhato el.");
		System.out.println(Main.getTabok() + "Adja meg a parameter erteket!");

		// Fuggvenyparameter bekerese a felhasznalotol.
		i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es ertek
				// ertelmezve van a kesobbi logikai valtozo vizsgalatokban
		while (i != 1) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if (i != 1) {
					// Hibas inputot hibauzenettel es ujboli bekeressel
					// kezeljuk.
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt parameter nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out
						.println(Main.getTabok()
								+ "Egesz szam. Ebben a tesztesetben, itt csak a 1 fogadhato el.");
			}
		}
		// A konkret metodushivas
		t.getPalyaelem(1);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// ----------------------------------------
		// Meghivjuk az k:Kulcs metszette metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: k.metszette(j):boolean");
		System.out.println(Main.getTabok() + "Vart parameterek:");
		System.out.println(Main.getTabok() + "j: Jatekos referencia");

		// A konkret metodushivas
		k.metszette(j);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// Elagazas kezelese, metszette-e a Jatekos az Kulcsot
		System.out.println(Main.getTabok() + "Metszette a Jatekos az Kulcsot?");
		System.out
				.println(Main.getTabok()
						+ "Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
		System.out.println(Main.getTabok() + "Adja meg a valaszt!");
		// Valasz bekerese a felhasznalotol.
		i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es ertek
				// ertelmezve van a kesobbi logikai valtozo vizsgalatokban
		while ((i != 0) && (i != 1)) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if ((i != 0) && (i != 1)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt valasz nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen");
			}
		}
		System.out.println(Main.getTabok() + "Dontes: " + i);

		if (i == 1) {
			// ----------------------------------------
			// Meghivjuk az k:Kulcs interakt metodusat.
			Main.hivasszam++;
			Main.tabszam++;

			System.out.println(Main.getTabok() + "-->");
			// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk
			// ki, mert az opt-ok miatt az nem allando.
			System.out.println(Main.getTabok() + "1." + Main.hivasszam
					+ " Hivott metodus: k.interakt(j):boolean");
			System.out.println(Main.getTabok() + "Vart parameterek:");
			System.out.println(Main.getTabok() + "j: Jatekos referencia");

			System.out.println(Main.getTabok() + "");
			System.out
					.println(Main.getTabok()
							+ "A fuggveny mukodeset a 5. tesztesetben tudjuk kiprobalni.");
			System.out.println(Main.getTabok() + "");
			System.out.println(Main.getTabok()
					+ "Visszateresi ertek: Kizarolag false erteket vehet fel.");
			System.out
					.println(Main.getTabok()
							+ "Logikai valtozo. Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
			System.out.println(Main.getTabok()
					+ "Adja meg a visszateresi erteket!");
			// Visszateresi ertek bekerese a felhasznalotol.
			i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es
					// ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
			while (i != 0) {
				try {
					sor = reader.readLine();
					i = Integer.parseInt(sor);
					if (i != 0) {
						throw new Exception();
					}
				} catch (Exception e) {
					// Hibas inputot hibauzenettel es ujboli bekeressel
					// kezeljuk.
					System.out
							.println(Main.getTabok()
									+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
					System.out
							.println(Main.getTabok()
									+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen. Kizarolag false erteket vehet fel.");
				}
			}
			System.out.println(Main.getTabok() + "Visszateresi ertek: " + i);
			System.out.println(Main.getTabok() + "<- -");
			Main.tabszam--;
		}

		// ----------------------------------------
		// Meghivjuk a t:Tile getPalyaelem(2) metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: t.getPalyaelem(i):Palyaelem");
		System.out.println(Main.getTabok() + "Vart parameterek:");
		System.out.println(Main.getTabok()
				+ "i: ciklusvaltozo, ennyiedik Palyaelemet kerjuk el");
		System.out
				.println(Main.getTabok()
						+ "Egesz szam. Ebben a tesztesetben, itt csak a 2 fogadhato el.");
		System.out.println(Main.getTabok() + "Adja meg a parameter erteket!");

		// Fuggvenyparameter bekerese a felhasznalotol.
		i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es ertek
				// ertelmezve van a kesobbi logikai valtozo vizsgalatokban
		while (i != 2) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if (i != 2) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt parameter nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out
						.println(Main.getTabok()
								+ "Egesz szam. Ebben a tesztesetben, itt csak a 2 fogadhato el.");
			}
		}
		// A konkret metodushivas
		t.getPalyaelem(2);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// ----------------------------------------
		// Meghivjuk az a:Ajto metszette metodusat.
		Main.hivasszam++;
		Main.tabszam++;

		System.out.println(Main.getTabok() + "-->");
		// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk ki,
		// mert az opt-ok miatt az nem allando.
		System.out.println(Main.getTabok() + "1." + Main.hivasszam
				+ " Hivott metodus: a.metszette(j):boolean");
		System.out.println(Main.getTabok() + "Vart parameterek:");
		System.out.println(Main.getTabok() + "j: Jatekos referencia");

		// A konkret metodushivas
		a.metszette(j);
		System.out.println(Main.getTabok() + "<- -");
		Main.tabszam--;

		// Elagazas kezelese, metszette-e a Jatekos az Ajtot
		System.out.println(Main.getTabok() + "Metszette a Jatekos az Ajtot?");
		System.out
				.println(Main.getTabok()
						+ "Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
		System.out.println(Main.getTabok() + "Adja meg a valaszt!");
		// Valasz bekerese a felhasznalotol.
		i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es ertek
				// ertelmezve van a kesobbi logikai valtozo vizsgalatokban
		while ((i != 0) && (i != 1)) {
			try {
				sor = reader.readLine();
				i = Integer.parseInt(sor);
				if ((i != 0) && (i != 1)) {
					throw new Exception();
				}
			} catch (Exception e) {
				// Hibas inputot hibauzenettel es ujboli bekeressel kezeljuk.
				System.out
						.println(Main.getTabok()
								+ "A bevitt valasz nem felel meg a megkoteseknek! Ezek a kovetkezok:");
				System.out.println(Main.getTabok()
						+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen");
			}
		}
		System.out.println(Main.getTabok() + "Dontes: " + i);

		if (i == 1) {
			// ----------------------------------------
			// Meghivjuk az a:Ajto interakt metodusat.
			Main.hivasszam++;
			Main.tabszam++;

			System.out.println(Main.getTabok() + "-->");
			// A hivasok szamat azert a Main hivaszam valtozoja alapjan irjuk
			// ki, mert az opt-ok miatt az nem allando.
			System.out.println(Main.getTabok() + "1." + Main.hivasszam
					+ " Hivott metodus: a.interakt(j):boolean");
			System.out.println(Main.getTabok() + "Vart parameterek:");
			System.out.println(Main.getTabok() + "j: Jatekos referencia");

			System.out.println(Main.getTabok() + "");
			System.out
					.println(Main.getTabok()
							+ "A fuggveny mukodeset a 4. tesztesetben tudjuk kiprobalni.");
			System.out.println(Main.getTabok() + "");
			System.out
					.println(Main.getTabok()
							+ "Visszateresi ertek: Megadja, hogy a Jatekos kimehet-e az Ajton.");
			System.out
					.println(Main.getTabok()
							+ "Logikai valtozo. Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
			System.out.println(Main.getTabok()
					+ "Adja meg a visszateresi erteket!");
			// Visszateresi ertek bekerese a felhasznalotol.
			i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es
					// ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
			while ((i != 0) && (i != 1)) {
				try {
					sor = reader.readLine();
					i = Integer.parseInt(sor);
					if ((i != 0) && (i != 1)) {
						throw new Exception();
					}
				} catch (Exception e) {
					// Hibas inputot hibauzenettel es ujboli bekeressel
					// kezeljuk.
					System.out
							.println(Main.getTabok()
									+ "A bevitt visszateresi ertek nem felel meg a megkoteseknek! Ezek a kovetkezok:");
					System.out
							.println(Main.getTabok()
									+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen");
				}
			}
			System.out.println(Main.getTabok() + "Visszateresi ertek: " + i);
			System.out.println(Main.getTabok() + "<- -");
			Main.tabszam--;

			// Elagazas kezelese, kimehet-e a Jatekos az Ajton
			System.out.println(Main.getTabok() + "Kimehet a Jatekos az Ajton?");
			System.out
					.println(Main.getTabok()
							+ "Egy egesz szam megadasaval adhato meg, aminek jelentese: 0 - nem, 1 - igen ");
			System.out.println(Main.getTabok() + "Adja meg a valaszt!");
			// Valasz bekerese a felhasznalotol.
			i = 10; // i azert kap ujbol 10-es erteket, mert a 0-as es 1-es
					// ertek ertelmezve van a kesobbi logikai valtozo
					// vizsgalatokban
			while ((i != 0) && (i != 1)) {
				try {
					sor = reader.readLine();
					i = Integer.parseInt(sor);
					if ((i != 0) && (i != 1)) {
						throw new Exception();
					}
				} catch (Exception e) {
					// Hibas inputot hibauzenettel es ujboli bekeressel
					// kezeljuk.
					System.out
							.println(Main.getTabok()
									+ "A bevitt valasz nem felel meg a megkoteseknek! Ezek a kovetkezok:");
					System.out
							.println(Main.getTabok()
									+ "Egesz szam. 0 vagy 1. Jelentese: 0 - nem, 1 - igen");
				}
			}
			System.out.println(Main.getTabok() + "Dontes: " + i);

			if (i == 1) {
				Main.hivasszam++;
				Main.tabszam++;

				System.out.println(Main.getTabok() + "-->");
				// A hivasok szamat azert a Main hivaszam valtozoja alapjan
				// irjuk ki, mert az opt-ok miatt az nem allando.
				System.out.println(Main.getTabok() + "1." + Main.hivasszam
						+ " Hivott metodus: j.kimegy():void");

				// A konkret metodushivas
				j.kimegy();
				System.out.println(Main.getTabok() + "<- -");
				Main.tabszam--;
			}
		}

		
		System.out.println(Main.getTabok() + "<- -");



		// Metodushivasok es tabok szamanak nullazasa.
		Main.hivasszam = 0;
		Main.tabszam = 0;
	}

	// Tuzko
	public void utkozesVizsgalatTile() {
		// Inicializalas, kiirjuk, hogy milyen objektumokat hozunk majd letre
		System.out.println("****************************************");
		System.out.println("Inicializalas.Objektumok letrehozasa.");
		System.out.println("Letrehozott objektum: p:Palya");
		System.out.println("Letrehozott objektum: t1:Tile");
		System.out.println("Letrehozott objektum: j:Jatekos");
		System.out.println("Letrehozott objektum: t2:Tile");
		System.out.println("****************************************");

		// ezeket csak a teszt miatt hozzuk letre itt, a vegso programban
		// ezek az objektumok mar ekkor letre lesznek hozva.
		Tile t1 = new Tile();
		Tile t2 = new Tile();
		Jatekos j = new Jatekos();

		// egy valtozo amibe majd a beolvasott valaszokat taroljuk, ha a valasz
		int valasz = 0;

		// egy valtozo amivel megoldjuk az opt/alt-nal felmerulo szamozasi
		// problemat.
		int hivSz = 1;

		// kinullazzuk, hogy biztos megfeleloen hasznaljuk
		Main.tabszam = 0;

		System.out.println(Main.getTabok() + "-->");
		System.out.println("1. Hivott metodus: p.utkozesVizsgalat()\n");

		// t1.metszette(j):boolean elokeszitese es meghivasa
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1."
				+ hivSz++ + " Hivott metodus: t1.metszette(j): boolean\n"
				+ Main.getTabok() + "Vart parameterek: \n" + Main.getTabok()
				+ "j: Jatekos referencia\n");
		t1.metszette(j);
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		System.out
				.println(Main.getTabok() + "Metszette a jatekos a t1 Tile-t?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		boolean ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok());
			}
		}

		// Dontunk arrol, hogy a program bekeruljon-e a metszette a t1 tilet
		// opcionalis agba.
		if (valasz == 0) {
			System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
		} else {
			System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
		}

		// metszette a t1 tile-t
		if (valasz == 1) {

			// j.getAktTile():Tile elokeszitese es meghivasa
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: j.getAktTile(): Tile\n");
			Tile jatekosAktTile = j.getAktTile();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// p.compareTile(jatekosAktTile, t1): boolean fuggveny meghivasa,
			// ami visszaadja,
			// hogy azonos-e a ket adott Tile megfelelo oldala
			Main.tabszam++;
			System.out
					.println(Main.getTabok()
							+ "-->\n"
							+ Main.getTabok()
							+ "1."
							+ hivSz++
							+ " Hivott metodus: p.compareTile(jatekosAktTile, t1): boolean\n"
							+ Main.getTabok()
							+ "Vart parameterek:\n"
							+ Main.getTabok()
							+ "jatekosAktTile: referencia a jatekos aktualis Tile-jara\n"
							+ Main.getTabok() + "t1: referencia a t1 Tile-ra\n");
			this.compareTile(jatekosAktTile, t1);
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// t1.interakt(j, tileEgyforma): boolean meghivasa
			Main.tabszam++;
			System.out
					.println(Main.getTabok()
							+ "-->\n"
							+ Main.getTabok()
							+ "1."
							+ hivSz++
							+ " Hivott metodus: t1.interakt(j, tileEgyforma): boolean\n"
							+ Main.getTabok()
							+ "Vart parameterek:\n"
							+ Main.getTabok()
							+ "j: referencia a Jatekosra\n"
							+ Main.getTabok()
							+ "tileEgyforma: egyforma-e a ket elobb megvizsgalt tile?\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a tileEgyforma parameter erteket!");

			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
				}
			}
			// miutan megvan a parameter, meghivjuk a fuggvenyt
			// viszont ezt a fuggvenyt majd egy masik tesztnel tudjuk kiprobalni
			// igy ezert itt nem hivjuk meg magat a fuggvenyt, csak imitaljuk
			// Megkerdezzuk a visszateresi erteket is
			boolean tileEgyforma;
			if (valasz == 0)
				tileEgyforma = false;
			else
				tileEgyforma = true;
			System.out
					.println(Main.getTabok()
							+ "A fuggveny mukodeset a 6. tesztesetben tudjuk kiprobalni.\n\n"
							+ Main.getTabok()
							+ "Visszateresi ertek: Meghalt-e a jatekos?\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
				}
			}

			if (valasz == 0) {
				System.out.println(Main.getTabok()
						+ "Visszateresi ertek: 0 - nem");
			} else {
				System.out.println(Main.getTabok()
						+ "Visszateresi ertek: 1 - igen");
			}
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;
		}

		// itt meghivjuk a ket opt kozotti t2.metszette(j):boolean fuggvenyt
		Main.tabszam++;
		System.out.println(Main.getTabok() + "-->\n" + Main.getTabok() + "1."
				+ hivSz++ + " Hivott metodus: t2.metszette(j): boolean\n"
				+ Main.getTabok() + "Vart parameterek: \n" + Main.getTabok()
				+ "j: Jatekos referencia\n");
		t2.metszette(j);
		System.out.println(Main.getTabok() + "<- -\n");
		Main.tabszam--;

		System.out
				.println(Main.getTabok() + "Metszette a jatekos a t2 Tile-t?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok());
			}
		}

		// Dontunk arrol, hogy a program bekeruljon-e a metszette a t1 tilet
		// opcionalis agba.
		if (valasz == 0) {
			System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
		} else {
			System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
		}

		if (valasz == 1) {
			// Ez az ag jelenti azt az esetet, amikor a jatekos metszette a
			// t2 Tile-t.

			// j.getAktTile():Tile elokeszitese es meghivasa
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++
					+ " Hivott metodus: j.getAktTile(): Tile\n");
			Tile jatekosAktTile = j.getAktTile();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// p.compareTile(jatekosAktTile, t2): boolean fuggveny meghivasa,
			// ami visszaadja,
			// hogy azonos-e a ket adott Tile megfelelo oldala
			Main.tabszam++;
			System.out
					.println(Main.getTabok()
							+ "-->\n"
							+ Main.getTabok()
							+ "1."
							+ hivSz++
							+ " Hivott metodus: p.compareTile(jatekosAktTile, t2): boolean\n"
							+ Main.getTabok()
							+ "Vart parameterek:\n"
							+ Main.getTabok()
							+ "jatekosAktTile: referencia a jatekos aktualis Tile-jara\n"
							+ Main.getTabok() + "t2: referencia a t2 Tile-ra\n");
			this.compareTile(jatekosAktTile, t2);
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;

			// t1.interakt(j, tileEgyforma): boolean meghivasa
			Main.tabszam++;
			System.out
					.println(Main.getTabok()
							+ "-->\n"
							+ Main.getTabok()
							+ "1."
							+ hivSz++
							+ " Hivott metodus: t2.interakt(j, tileEgyforma): boolean\n"
							+ Main.getTabok()
							+ "Vart parameterek:\n"
							+ Main.getTabok()
							+ "j: referencia a Jatekosra\n"
							+ Main.getTabok()
							+ "tileEgyforma: egyforma-e a ket elobb megvizsgalt tile?\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a tileEgyforma parameter erteket!");

			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
				}
			}
			// miutan megvan a parameter, meghivjuk a fuggvenyt
			// viszont ezt a fuggvenyt majd egy masik tesztnel tudjuk kiprobalni
			// igy ezert itt nem hivjuk meg magat a fuggvenyt, csak imitaljuk
			// Megkerdezzuk a visszateresi erteket is
			boolean tileEgyforma;
			if (valasz == 0)
				tileEgyforma = false;
			else
				tileEgyforma = true;
			System.out
					.println(Main.getTabok()
							+ "A fuggveny mukodeset a 6. tesztesetben tudjuk kiprobalni.\n\n"
							+ Main.getTabok()
							+ "Visszateresi ertek: Meghalt-e a jatekos?\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
			// A felhasznaloi input ellenorzese.
			ok = false;
			while (!ok) {
				try {
					BufferedReader consoleIn = new BufferedReader(
							new InputStreamReader(System.in));
					String stringInt = consoleIn.readLine();
					valasz = Integer.parseInt(stringInt);
					if (valasz == 0 || valasz == 1)
						ok = true;
					else
						throw new Exception();

					// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
					// kivetel dobodik es azt itt kezeljuk.
					// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
					// leirjuk a kriteriumokat.
				} catch (Exception e) {
					System.out.println(Main.getTabok()
							+ "A bevitt parameter nem felel "
							+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
							+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
							+ "1 - igen\n" + Main.getTabok()
							+ "Adja meg a visszateresi erteket!");
				}
			}

			if (valasz == 0) {
				System.out.println(Main.getTabok()
						+ "Visszateresi ertek: 0 - nem");
			} else {
				System.out.println(Main.getTabok()
						+ "Visszateresi ertek: 1 - igen");
			}
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;
		}

		System.out.println(Main.getTabok() + "Meghalt a jatekos?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// A felhasznaloi input ellenorzese.
		ok = false;
		while (!ok) {
			try {
				BufferedReader consoleIn = new BufferedReader(
						new InputStreamReader(System.in));
				String stringInt = consoleIn.readLine();
				valasz = Integer.parseInt(stringInt);
				if (valasz == 0 || valasz == 1)
					ok = true;
				else
					throw new Exception();

				// Ha a felhasznalo nem megfelelo adatot vitt be, akkor
				// kivetel dobodik es azt itt kezeljuk.
				// Kiirjuk, hogy nem megfelelo a bevitt adat es ujbol
				// leirjuk a kriteriumokat.
			} catch (Exception e) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel "
						+ "meg a megkoteseknek! Ezek a kovetkezok:\n"
						+ Main.getTabok() + "0 - nem\n" + Main.getTabok()
						+ "1 - igen\n" + Main.getTabok());
			}
		}
		if (valasz == 0) {
			System.out.println(Main.getTabok() + "Dontes: 0 - nem\n");
		} else {
			System.out.println(Main.getTabok() + "Dontes: 1 - igen\n");
		}

		// Ha meghalt a jatekos, akkor meghivjuk neki a meghal() metodusat
		if (valasz == 1) {
			Main.tabszam++;
			System.out.println(Main.getTabok() + "-->\n" + Main.getTabok()
					+ "1." + hivSz++ + " Hivott metodus: j.meghal()\n");
			j.meghal();
			System.out.println(Main.getTabok() + "<- -\n");
			Main.tabszam--;
		}
		System.out.println(Main.getTabok() + "<- -\n");
		System.out.println("****************************************\n");

		// Hogy biztos megfelelo erteku legyen
		Main.tabszam = 0;
	}

	// Major
	public void mozgatUgras() {
		// input: A bekert 0 vagy 1 ertek.
		int input = 35;
		// Beolvasashoz szukseges valtozok.
		BufferedReader reader;
		String sor;
		reader = new BufferedReader(new InputStreamReader(System.in));

		// Inicializalas, szukseges objektumok letrehozasa.
		System.out.println("****************************************");
		System.out.println("Inicializalas. Objektumok letrehozasa.");
		System.out.println("Letrehozott objektum: p:Palya");
		System.out.println("Letrehozott objektum: j:Jatekos");
		Jatekos j = new Jatekos();
		System.out.println("Inicializalas vege.");
		System.out.println("****************************************");

		// Tesztelt metodus hivasa
		System.out.println("--->");
		System.out.println("1. Hivott metodus: p.mozgat()");
		System.out.println("");

		// Elagazasra rakerdezes.
		System.out.println(Main.getTabok() + "Ugorhat a jatekos?");
		System.out.println(Main.getTabok() + "0 - nem");
		System.out.println(Main.getTabok() + "1 - igen");

		// Addig kerdezni ra az inputra, mig meg nem felel a megkoteseknek.
		while (input > 1 || input < 0) {

			try {
				// beolvasas
				sor = reader.readLine();
				// beolvasott sor integerre valtoztatasa
				input = Integer.parseInt(sor);
			} catch (Exception e) {

			}

			// Ha az input nem 1 vagy 0, akkor kiirjuk a hibat.
			if (input > 1 || input < 0) {
				System.out.println(Main.getTabok()
						+ "A bevitt parameter nem felel meg a megkoteseknek! ");
				System.out.println(Main.getTabok() + "Ezek a kovetkezok:");
				System.out.println(Main.getTabok() + "0 - nem");
				System.out.println(Main.getTabok() + "1 - igen");
			}
		}

		if (input == 1) {
			// dontes kiirasa
			System.out.println(Main.getTabok() + "Dontes: Igen.");
			System.out.println("");
			// tabszam novelese
			Main.tabszam++;
			System.out.println(Main.getTabok() + "--->");
			System.out.println(Main.getTabok()
					+ "1.1 Hivott metodus: j.ugras()");
			// fuggveny valodi hivasa
			j.ugras();
			System.out.println(Main.getTabok() + "<- -");
			System.out.println("");
			// tabszam csokkentese
			Main.tabszam--;
		} else {
			// dontes kiirasa
			System.out.println(Main.getTabok() + "Dontes: Nem.");
		}

		System.out.println("<- -");
		System.out.println("****************************************");
	}
}
